From e19cbd7a045935a63801bc853746b5225d7de426 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Fri, 11 Nov 2011 23:49:21 +0100 Subject: [PATCH] quartz: fix a race condition when waking up the CGRunLoop Wake up the run loop unconditionally (don't check if it is waiting) because it might go into waiting state right after we checked for it. Fixes GIMP startup (which has a lot of GIOChannel I/O but zero NSEvents) from several minutes to a few seconds. (cherry picked from commit 0729cdc9a1e8003c41d3ebf20eecfe2d1b29ffbe) --- gdk/quartz/gdkeventloop-quartz.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/gdk/quartz/gdkeventloop-quartz.c b/gdk/quartz/gdkeventloop-quartz.c index 702238c089..4181a5de24 100644 --- a/gdk/quartz/gdkeventloop-quartz.c +++ b/gdk/quartz/gdkeventloop-quartz.c @@ -207,9 +207,12 @@ signal_main_thread (void) */ if (!run_loop_polling_async) CFRunLoopSourceSignal (select_main_thread_source); - - if (CFRunLoopIsWaiting (main_thread_run_loop)) - CFRunLoopWakeUp (main_thread_run_loop); + + /* Don't check for CFRunLoopIsWaiting() here because it causes a + * race condition (the loop could go into waiting state right after + * we checked). + */ + CFRunLoopWakeUp (main_thread_run_loop); } static void * -- 2.30.2